package com.fly.estore.service.Impl;

import com.fly.estore.dao.ModuleDAO;
import com.fly.estore.domain.ModuleInfo;
import com.fly.estore.framework.util.CommonUtil;
import com.fly.estore.service.ModuleService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Fly on 2016/4/13.
 */
@Service("ModuleService")
public class ModuleServiceImpl implements ModuleService
{
    @Autowired
    ModuleDAO moduleDAO;

    /**
     * 保存模块信息
     * @param moduleInfo    模块对象
     * @return  更新行数
     */
    public int saveModuleInfo(ModuleInfo moduleInfo) {
        int update = 0;
        if (StringUtils.isBlank(moduleInfo.getModuleId())){
            //新增模块
            moduleInfo.setModuleId(CommonUtil.genPK());
            update = moduleDAO.add(moduleInfo);
        }
        else{
            //更新
            update = moduleDAO.update(moduleInfo);
        }
        return update;
    }

    /**
     * 根据模块id删除模块
     * @param moduleId  模块id
     * @return 更新行数
     */
    public int deleteModuleById(String moduleId) {
        int update = 0;
        update = moduleDAO.deleteById(moduleId);
        return update;
    }

    /**
     * 根据模块id获取模块对象
     * @param moduleId  模块id
     * @return  模块对象
     */
    public ModuleInfo getModuleById(String moduleId) {
        ModuleInfo moduleInfo = null;
        moduleInfo = moduleDAO.getById(moduleId);
        return moduleInfo;
    }

    /**
     * 获取模块列表
     * @return  所有模块列表
     */
    public List<ModuleInfo> getModuleList() {
        List<ModuleInfo> moduleList = new ArrayList<ModuleInfo>();
        getModuleListByParentId(moduleList, "");
        return moduleList;
    }

    private void getModuleListByParentId(List<ModuleInfo> moduleList, String parentModuleId){
        List<ModuleInfo> list = moduleDAO.getListByParentId(parentModuleId);
        for(ModuleInfo module: list){
            moduleList.add(module);
            getModuleListByParentId(moduleList, module.getModuleId());
        }
    }
}
